/**
 * 菜单构建器模块
 * 统一构建所有平台的菜单结构，不区分平台差异
 */

/**
 * 菜单构建器类
 */
class MenuBuilder {
  constructor (menuConfig, options = {}) {
    this.config = menuConfig
    this.options = options
    this.isSecondary = options.secondary || false
  }

  /**
   * 构建完整的应用菜单
   * @returns {Menu} Electron Menu 对象
   */
  build () {
    const template = this.buildTemplate()
    return Menu.buildFromTemplate(template)
  }

  /**
   * 构建菜单模板
   * 统一所有平台的菜单结构
   * @returns {Array} 菜单模板数组
   */
  buildTemplate () {
    const template = []

    // 次要菜单（右键菜单）的特殊处理
    if (this.isSecondary) {
      template.push(...this.buildSecondaryMenuItems())
      return template
    }

    // 主菜单结构（所有平台统一）
    // 1. 应用菜单
    template.push(this.config.appMenu)

    // 2. 文件菜单
    template.push(this.buildFileMenu())

    // 3. 编辑菜单
    template.push(this.buildEditMenu())

    // 4. 视图菜单
    template.push(this.buildViewMenu())

    // 5. 开发者菜单
    template.push(this.buildDeveloperMenu())

    // 6. 窗口菜单
    template.push(this.config.windowMenu)

    // 7. 帮助菜单
    template.push(this.buildHelpMenu())

    return template
  }

  /**
   * 构建次要菜单项
   * @returns {Array} 菜单项数组
   */
  buildSecondaryMenuItems () {
    return [
      ...this.config.tabTaskActions,
      { type: 'separator' },
      ...this.config.personalDataItems,
      { type: 'separator' },
      this.config.preferencesAction,
      { type: 'separator' }
    ]
  }

  /**
   * 构建文件菜单
   * @returns {Object} 文件菜单对象
   */
  buildFileMenu () {
    const { sendIPCToWindow } = this.config.handlers

    return {
      label: l('appMenuFile'),
      submenu: [
        ...this.config.tabTaskActions,
        { type: 'separator' },
        {
          label: l('appMenuSavePageAs'),
          accelerator: 'CmdOrCtrl+s',
          click: (item, window) => {
            sendIPCToWindow(window, 'saveCurrentPage')
          }
        },
        { type: 'separator' },
        {
          label: l('appMenuPrint'),
          accelerator: 'CmdOrCtrl+p',
          click: (item, window) => {
            sendIPCToWindow(window, 'print')
          }
        }
      ]
    }
  }

  /**
   * 构建编辑菜单
   * @returns {Object} 编辑菜单对象
   */
  buildEditMenu () {
    return {
      label: l('appMenuEdit'),
      submenu: [...this.config.editMenu.submenu]
    }
  }

  /**
   * 构建视图菜单
   * @returns {Object} 视图菜单对象
   */
  buildViewMenu () {
    const submenu = []

    // 主菜单中包含个人数据项
    if (!this.isSecondary) {
      submenu.push(...this.config.personalDataItems)
      submenu.push({ type: 'separator' })
    }

    // 缩放和其他视图选项（跳过个人数据项和分隔符）
    const personalDataCount = this.config.personalDataItems.length
    const viewMenuItems = this.config.viewMenu.submenu.slice(personalDataCount + 1)
    submenu.push(...viewMenuItems)

    return {
      label: l('appMenuView'),
      submenu
    }
  }

  /**
   * 构建开发者菜单
   * @returns {Object} 开发者菜单对象
   */
  buildDeveloperMenu () {
    const submenu = [...this.config.developerMenu.submenu]

    // 开发模式下的额外菜单项
    const { isDevelopmentMode, isDebuggingEnabled } = this.config.handlers
    if (isDevelopmentMode || isDebuggingEnabled) {
      submenu.push(...this.config.developmentMenuItems)
    }

    return {
      label: l('appMenuDeveloper'),
      submenu
    }
  }

  /**
   * 构建帮助菜单
   * 关于项已在应用菜单中，此处不重复添加
   * @returns {Object} 帮助菜单对象
   */
  buildHelpMenu () {
    return {
      label: l('appMenuHelp'),
      role: 'help',
      submenu: [...this.config.helpMenu.submenu]
    }
  }

  /**
   * 构建 Dock 菜单（仅 macOS 平台支持）
   * 注意：Dock 菜单是 macOS 特有的系统功能，需要平台检测
   * @returns {Menu|null} Dock 菜单对象或 null
   */
  buildDockMenu () {
    // Dock 菜单仅在 macOS 平台支持（这是系统功能限制，不是菜单风格问题）
    if (process.platform !== 'darwin') {
      return null
    }

    const template = this.config.dockMenuItems.map(item => {
      return this.config.createMenuItem(item)
    })

    return Menu.buildFromTemplate(template)
  }
}

